WIFI sta和ap桥接


1. 配置修改

内核配置:

make menuconfig
1:
Networking support -> Wireless:
<*> cfg80211 - wireless configuration API
2:
Device Drivers->Generic Driver options
[*] Support for uevent helper
3:
Networking support → Networking options
<M> 802.1d Ethernet Bridging

生成image ,同时在kernel/modules下生成llc.ko,stp.ko,bridge.ko用作桥接驱动。

SSD21x系列: 修改project/kbuild/customize/4.9.84/p3/dispcam/kernel_mod_list_late

SSD20x系列: 修改project/kbuild/4.9.84/i2m/configs/nvr/011A/glibc/8.2.1/xxx/modules/kernel_mod_list

依次添加 llc.kostp.kobridge.ko


2. 板端修改

0:修改/appconfigs/wpa_supplicant.conf,添加外部AP热点信息
/ # vi appconfigs/wpa_supplicant.conf
ctrl_interface=/tmp/wifi/run/wpa_supplicant
update_config=1

network={
    ssid="aryl iPhone"
    psk="123456789a"
}
  1. 加载驱动

    cd /config/wifi
    
    mkdir -p /tmp/wifi/run/wpa_supplicant
    
    insmod llc.ko
    insmod stp.ko
    insmod bridge.ko
    
  2. hostapd.conf需要添加一项配置项

    interface=p2p0 //ssw101/2b 采用p2p0做ap interface。
    bridge=br0  //固定
    hw_mode=g  //固定
    channel=1
    

    注意: 桥接使用channel,前后端都是一致的。取决于wlan0 连接到ap的channel,此处要填写相应channel。

  3. 添加环境变量,将wifi用到的so添加到系统中。一般放置在/config/wifi下面export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib:pwd

  4. 初始化wifi模块

    ssd20x系列参考脚本 ./ssw01blnit.sh

    ssd21x系列参考脚本./sigma_wifi_init.sh

    注:如果遇到sh: write error: Invalid argument ,可以忽略。

  5. 建立网卡桥接

    ifconfig wlan0 up
    ifconfig p2p0 up
    ifconfig wlan0 0.0.0.0
    ifconfig p2p0 0.0.0.0
    brctl addbr br0
    brctl addif br0 wlan0
    brctl addif br0 p2p0
    ifconfig br0 up
    
  6. sta连接wifi

    ./wpa_supplicant -Dnl80211 -i wlan0 -c /appconfigs/wpa_supplicant.conf -b br0 &
    udhcpc -S /etc/init.d/udhcpc.script -i br0
    
  7. 开启AP模式

    ./hostapd -B /config/wifi/hostapd.conf
    ./dnsmasq -i p2p0 --no-daemon -C /config/wifi/dnsmasq.conf &
    

AP: SSID:ssw101bap pwd:12345678

如果sta可以连接外网,那么通过pc连接ssw101bap后,也可以正常连上网络。

注:如果sta连接wifi,出现 wlan0 is not sta mode的错误信息,可能是wifi驱动和kernel没有匹配。请找对应的wifi模组厂,提供新的ko。